var DataType = {
    parse: function(v) {
        var type = gg.type(v);
        if (type === 'string') {
            v = JSON.parse(v);
            type = gg.type(v);
        }
        if (type === 'array') {
            return v;
        } else {
            gg.error('datatype error');
        }
    },
            
    /**
     * 向数组中增加元素
     * @param {Array} a
     * @param {Mixed} b
     * @param {Number} at 添加元素到所在数组的位置
     * @return {Array}
     */
    add: function(a, b, at) {
        if (at > 0) {
            a.splice(at, 0, b);
        } else if (at === 0) {
            a.unshift(b);
        } else {
            a.push(b);
        }
        return a;
    },
    /**
     * 移除数组某个位置上的元素
     * @param {Array} a
     * @param {Number} at 移除元素所在数组的位置
     * @return {Array}
     */
    removeAt: function(a, at) {
        if (at >= 0) {
            a.splice(at, 1);
        }
        return a;
    },
    /**
     * 移除指定元素
     * @param {Array} a
     * @param {Mixed} b
     * @return {Array}
     */
    remove: function(a, b) {
        var at = _.indexOf(a, b);
        if(at >= 0){
            a.splice(at, 1);
        }
        return a;
    },
    /**
     * 将两个数组合并
     * @param {Array} a
     * @param {Array} b
     * @return {Array}
     */
    concat: function(a, b) {
        b = this.parse(b);
        return a.concat(b);
    },
    /**
     * 去除数组重复元素
     * @param {Array} a
     * @return {Array}
     */
    uniq: function(a) {
        return _.uniq(a);
    },
    /**
     * 合并并去除重复元素
     * @param {Array} a
     * @param {Array} b
     * @return {Array}
     */
    union: function(a, b) {
        b = this.parse(b);
        return _.union(a, b);
    },
    /**
     * 取出数组的前几个元素 若不提供参数n则返回第一个元素
     * @param {Array} a
     * @param {Number} n
     * @return {Array | Mixed} 
     */
    first: function(a, n) {
        return _.first(a, n);
    },
    /**
     * 取出数组的最后几个元素 若不提供参数n则返回最后一个元素
     * @param {Array} a
     * @param {Number} n
     * @return {Array | Mixed} 
     */
    last: function(a, n) {
        return _.last(a, n);
    }
};

module.exports = DataType;